// 导入路由
import router from './router'
// 导入store模块
import store from './store'

// 导入进度条插件及其样式
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 拿到拼接浏览器标题的方法
import getPageTitle from './utils/get-page-title'

// 声明白名单
const whiteList = ['/login', '/404']

// 路由的前置守卫
router.beforeEach(async (to, from, next) => {
  // 路由发生页面切换时，切换浏览器标签栏上的标题
  // document.title = '内容'
  // 前置名字->在settings.js中定义的(代码规范要求：不要在代码中出现固定的值)
  // 为什么：以后不方便维护和更改（封装成全局的配置放到 setting.js)
  // document.title = '人力资源管理系统' + to.meta.title
  document.title = getPageTitle(to.meta.title)
  // 当访问某一个路由的时候，需要直接显示进度条
  NProgress.start()

  // 获取token
  const token = store.state.user.token
  // 判断token是否存在
  if (token) {
    if (to.path === '/login') {
      // 如果有 token，说明登录了，访问的又是登录页面，直接跳转到主页面
      // 不需要用户进行重复登录操作
      next('/')
    } else {
      // 在放行之前，先获取用户新的数据，在获取到数据之后，再进行跳转
      // 为什么需要在这里调用呢？
      // 为了在后面做权限管理做铺垫
      await store.dispatch('user/getUserInfo')
      next()
    }
  } else {
    // 判断访问的地址是否在白名单中
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 如果访问的页面不在白名单中
      next('/login')
    }
  }

  // 强制关闭进度条,解决一些特殊，极端情况下，进度条不关闭的情况
  NProgress.done()
})

// 路由的后置守卫
router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})

/* import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

// 白名单
const whiteList = ['/login'] // no redirect whitelist

router.beforeEach(async (to, from, next) => {
  // start progress bar
  NProgress.start()

  // set page title
  document.title = getPageTitle(to.meta.title)

  // determine whether the user has logged in
  const hasToken = getToken()

  if (hasToken) {
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done()
    } else {
      const hasGetUserInfo = store.getters.name
      if (hasGetUserInfo) {
        next()
      } else {
        try {
          // get user info
          await store.dispatch('user/getInfo')

          next()
        } catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {
    // has no token

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      next()
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})*/
